package org.zecontech.extraplus.util;

import net.minecraft.core.component.DataComponents;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.level.ItemLike;
import net.neoforged.neoforge.common.Tags;

/**
 * 物品工具类
 */
public class ItemUtils {

    /**
     * 获取物品是否是木板
     * @param itemLike 物品
     * @return 是否是木板
     */
    public static boolean isPlanks(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("planks")
                || itemLike.asItem().getDefaultInstance().is(ItemTags.PLANKS);
    }

    /**
     * 获取物品是否是树叶
     * @param itemLike 物品
     * @return 是否是树叶
     */
    public static boolean isLeaves(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("leaves")
                || itemLike.asItem().getDefaultInstance().is(ItemTags.LEAVES);
    }

    /**
     * 获取物品是否是木头
     * @param itemLike 物品
     * @return 是否是木头
     */
    public static boolean isLog(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("log")
                || itemLike.asItem().getDefaultInstance().is(ItemTags.LOGS);
    }

    /**
     * 获取物品是否是蘑菇
     * @param itemLike 物品
     * @return 是否是蘑菇
     */
    public static boolean isMushroom(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("mushroom")
                || itemLike.asItem().getDefaultInstance().is(Tags.Items.MUSHROOMS);
    }

    /**
     * 获取物品是否是盔甲
     * @param itemLike 物品
     * @return 是否是盔甲
     */
    public static boolean isArmor(ItemLike itemLike) {
        return isHelmet(itemLike)
                || isChestplate(itemLike)
                || isLeggings(itemLike)
                || isBoots(itemLike)
                || isHorseArmor(itemLike)
                || itemLike.asItem().getDefaultInstance().is(Tags.Items.ARMORS)
                || itemLike.asItem().getDefaultInstance().is(Tags.Items.ARMORS);
    }

    /**
     * 获取物品是否是马甲
     * @param itemLike 物品
     * @return 是否是马甲
     */
    public static boolean isHorseArmor(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("horse_armor");
    }

    /**
     * 获取物品是否是头盔
     * @param itemLike 物品
     * @return 是否是头盔
     */
    public static boolean isHelmet(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("helmet")
                || itemLike.asItem().getDefaultInstance().is(ItemTags.HEAD_ARMOR);
    }

    /**
     * 获取物品是否是胸甲
     * @param itemLike 物品
     * @return 是否是胸甲
     */
    public static boolean isChestplate(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("chestplate")
                || itemLike.asItem().getDefaultInstance().is(ItemTags.CHEST_ARMOR);
    }

    /**
     * 获取物品是否是护腿
     * @param itemLike 物品
     * @return 是否是护腿
     */
    public static boolean isLeggings(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("leggings")
                || itemLike.asItem().getDefaultInstance().is(ItemTags.LEG_ARMOR);
    }

    /**
     * 获取物品是否是靴子
     * @param itemLike 物品
     * @return 是否是靴子
     */
    public static boolean isBoots(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("boots")
                || itemLike.asItem().getDefaultInstance().is(ItemTags.FOOT_ARMOR);
    }

    /**
     * 判断物品是否是工具
     * @param itemLike 物品
     * @return 是否是工具
     */
    public static boolean isTools(ItemLike itemLike) {
        return isAxe(itemLike)
                || isShovel(itemLike)
                || isPickaxe(itemLike)
                || isSword(itemLike)
                || isShears(itemLike)
                || isHoe(itemLike)
                || itemLike.asItem().getDefaultInstance().is(Tags.Items.TOOLS);
    }

    /**
     * 获取物品是否是剪刀
     * @param itemLike 物品
     * @return 是否是剪刀
     */
    public static boolean isShears(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("shears")
                || itemLike.asItem().getDefaultInstance().is(Tags.Items.TOOLS_SHEAR);
    }

    /**
     * 获取物品是否是锄头
     * @param itemLike 物品
     * @return 是否是锄头
     */
    public static boolean isHoe(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("hoe")
                || itemLike.asItem().getDefaultInstance().is(ItemTags.HOES);
    }

    /**
     * 获取物品是否是镐子
     * @param itemLike 物品
     * @return 是否是镐子
     */
    public static boolean isPickaxe(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("pickaxe")
                || itemLike.asItem().getDefaultInstance().is(ItemTags.PICKAXES);
    }

    /**
     * 获取物品是否是斧头
     * @param itemLike 物品
     * @return 是否是斧头
     */
    public static boolean isAxe(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("axe") &&
                !Helpers.getItemName(itemLike).contains("pickaxe")
                || itemLike.asItem().getDefaultInstance().is(ItemTags.AXES);
    }

    /**
     * 获取物品是否是铲子
     * @param itemLike 物品
     * @return 是否是铲子
     */
    public static boolean isShovel(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("shovel")
                || itemLike.asItem().getDefaultInstance().is(ItemTags.SHOVELS);
    }

    /**
     * 获取物品是否是剑
     * @param itemLike 物品
     * @return 是否是剑
     */
    public static boolean isSword(ItemLike itemLike) {
        return Helpers.getItemName(itemLike).contains("sword")
                || itemLike.asItem().getDefaultInstance().is(ItemTags.SWORDS);
    }

    /**
     * 判断物品是否可食用
     * @param itemLike 物品
     * @return 是否可食用
     */
    public static boolean isEdible(ItemLike itemLike) {
        return itemLike.asItem().getDefaultInstance().has(DataComponents.FOOD);
    }
}
